/**
*Proyecto: Autopista V.1
*VehiculoDao.java
*Fecha Creacion: 26 Junio del 2013
*SWITZ Software Artists Derechos Reservados R
*/
package mx.com.switz.autopista.dao;


import java.util.List;

import mx.com.switz.autopista.dto.Empresa;
import mx.com.switz.autopista.dto.Estado;
import mx.com.switz.autopista.dto.FiltroBusqueda;
import mx.com.switz.autopista.dto.Vehiculo;
import mx.com.switz.autopista.exception.AutopistaException;
import mx.com.switz.autopista.vo.OpcionesCatalogo;
/**
*Interface que contiene los metodos del Vehiculo, sin implementacion
*@author Hector Silvar SWITZ Software Artists
*@author Jovani Arzate Cabrera SWITZ Software Artists
*/
public interface VehiculoDao {	
	/**
	 * Metodo que inserta un Vehiculo en la tabla Vehiculo
	 * @param vehiculo Objeto del tipo Vehiculo
	 * @return Bandera de tipo boolean para verificar si se inserto el Vehiculo
	 */
	String insertVehiculo(Vehiculo vehiculo)throws AutopistaException;
	
	/**
	 * Metodo que actualiza un vehiculo en la tabla Vehiculo
	 * @param vehiculo Objeto del tipo Vehiculo
	 * @return Bandera de tipo boolean para verificar si se modifico el Vehiculo
	 */
	boolean updateVehiculo(Vehiculo vehiculo)throws AutopistaException;
	
	/**
	 * Metodo que elimina un vehiculo en la tabla Vehiculo
	 * @param vehiculo Objeto del tipo Vehiculo
	 * @return Bandera de tipo boolean para verificar si se elimino el Vehiculo
	 */
	boolean deleteVehiculo(Vehiculo vehiculo)throws AutopistaException;
	
	/**
	 * Metodo que busca un Vehiculo por su Id
	 * @param vehiculo Objeto del tipo Vehiculo
	 * @return Vehiculo Retorna el vehiculo encontrado
	 */
	Vehiculo findVehiculoByID(Vehiculo vehiculo)throws AutopistaException;
	
	/**
	 * @param vehiculo Objeto del tipo Vehiculo
	 * @return Cliente Retorna los datos del cliente encontrado
	 */
	Empresa findEmpresaByVehiculo(Vehiculo vehiculo)throws AutopistaException;
	
	/**
	 * Metodo que obtiene una lista de Vehiculo segun el estado
	 * @param Estado Objeto del tipo Estado
	 * @return List Retorna una lista de tipo Vehiculos
	 */
	List<Vehiculo> selectVehiculo()throws AutopistaException;
	/**
	 *Metodo que devuelve una Lista de Vehiculos de cierta empresa
	 * @return List devuelve una lista
	 */
	List<Vehiculo> selectVehiculoByEmpresa(Empresa empresa)throws AutopistaException;
	
	/**
	 * Metodo que realiza la busqueda de vehiculo por medio de los filtros.
	 * @param  querySearch Setencia sql con los filtros selecccionados.
	 * @return Lista de vehiculos que cumplen con los filtros. 
	 * @throws AutopistaException
	 */
	List<Vehiculo>  selectVehiculo(String querySearch) throws AutopistaException;
	
	/**
	 * Metodo para verificar si el vehiculo cuenta con foto(s)
	 * @return bandera para validar existencia de foto(s)
	 * @throws AutopistaException
	 */
	boolean existsUrlFoto() throws AutopistaException;
	
	/**
	 * Metodo para verificar si existe precio rebajado en el vehiculo
	 * @return bandera para validar existencia de precio_rebajado
	 * @throws AutopistaException
	 */
	boolean existsPrecioRebajado() throws AutopistaException;
	
	/**
	 * Metodo para obtener el catalogo de Combustibles 
	 * @return Lista de combustibles
	 * @throws AutopistaException En caso de ocurrior una excepcion
	 */
	List<OpcionesCatalogo> selectVehiculoCombustible() throws AutopistaException;
	
	/**
	 * Metodo para obtener catalogo de Marcas
	 * @return Lista de Marcas
	 * @throws AutopistaException En caso de ocurrior una excepcion
	 */
	List<OpcionesCatalogo> selectVehiculoMarca() throws AutopistaException;
	
	/**
	 * Metodo para obtener el catalogo de los modelos dependiento de la marca seleccionada
	 * @param idMarca
	 * @return Lista de Modelos
	 * @throws AutopistaException En caso de ocurrior una excepcion
	 */
	List<OpcionesCatalogo> selectVehiculoModelo(Integer idMarca) throws AutopistaException;
	
	/**
	 * Metodo para obtener el catalogo de tipo de vehiculo
	 * @return Lista de tipos de vehiculo
	 * @throws AutopistaException En caso de ocurrior una excepcion
	 */
	List<OpcionesCatalogo> selectVehiculoTipo() throws AutopistaException;
	
	/**
	 * Metodo para obtener el catalogo de transmisiones
	 * @return Lista de transmisiones
	 * @throws AutopistaException En caso de ocurrior una excepcion
	 */
	List<OpcionesCatalogo> selectVehiculoTransmision() throws AutopistaException;
	
	/**
	 * Metodo que permite la inserccion de la url de una foto
	 * @param key
	 * @param UrlFoto
	 * @return Badera para verificar si se inserto
	 * @throws AutopistaException
	 */
	boolean insertVehiculoFoto(String key, String UrlFoto)throws AutopistaException;

	List<Vehiculo> findAllImagesByVehiculoId(Vehiculo vehiculo);
}
